package cn.haocxy.jfm.util;


/**
 * 保存事件处理器，处理事件处理器的添加、删除、以及统一调用。
 * <p>
 * 这个类因为要频繁与GUI交互，所以<strong>不是线程安全的</strong>。
 * 
 * @author 蔡心宇
 *
 * @param <T> 管理的事件类型
 */
public final class EventHandlers<T extends Event> {

	private final Some<EventHandler<T>> handlers = new Some<>();
	
	public EventHandlers() {
	}
	
	public void addHandler(EventHandler<T> handler) {
		handlers.add(handler);
	}
	
	public void removeHandler(EventHandler<T> handler) {
		handlers.remove(handler);
	}
	
	public boolean hasHandler() {
		return handlers.hasElem();
	}
	
	public boolean isEmpty() {
		return handlers.isEmpty();
	}
	
	public void clear() {
		handlers.clear();
	}
	
	public void applyAll(T event) {
		handlers.each(handler->handler.apply(event));
	}
}
